package servlet;

import bean.User;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;

/**
 * 登录处理Servlet
 * 负责处理用户登录请求，验证用户名和密码
 * 使用@WebServlet注解映射到"/LoginServlet"路径
 */
// @WebServlet("/LoginServlet")：告诉服务器，当请求路径是 /LoginServlet 时，由这个类处理。
@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
    // 固定的用户名和密码（仅用于演示，实际应用中应该从数据库获取）
    private static final String VALID_USERNAME = "admin";
    private static final String VALID_PASSWORD = "123456";

    /**
     * 处理POST请求的方法
     * 接收登录表单提交的数据，进行验证
     * 
     * @param request  HTTP请求对象，包含用户提交的表单数据
     * @param response HTTP响应对象，用于向客户端返回结果
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // 设置请求编码为UTF-8，确保中文正确显示
        request.setCharacterEncoding("UTF-8");

        // 从请求中获取用户提交的用户名和密码
        String username = request.getParameter("username");
        String password = request.getParameter("password");

        // 验证用户名和密码是否匹配
        if (VALID_USERNAME.equals(username) && VALID_PASSWORD.equals(password)) {
            // 登录成功，创建User对象
            User user = new User(username, password);
            user.setEmail("admin@example.com"); // 示例邮箱
            user.setRegisterTime("2024-01-01"); // 示例注册时间

            // 获取session对象，用于存储用户登录状态
            HttpSession session = request.getSession();
            // 将用户对象存入session
            session.setAttribute("user", user);
            // 设置登录状态为true
            session.setAttribute("isLoggedIn", true);
            // 重定向到首页
            response.sendRedirect("home.jsp");
        } else {
            // 登录失败
            // 设置错误信息
            request.setAttribute("error", "用户名或密码错误");
            // 转发回登录页面，显示错误信息
            request.getRequestDispatcher("login.jsp").forward(request, response);
        }
    }

    /**
     * 处理GET请求的方法
     * 将GET请求转发给doPost方法处理
     * 
     * @param request  HTTP请求对象
     * @param response HTTP响应对象
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doPost(request, response);
    }
}